ListNode* reverseList(ListNode* head)
{
  // 1. 直接 return
  if (!head || !head->next)
    return head;

  // 2. 递归逆序 head->next 子链表，并接收返回的 新头节点
  ListNode* newHead = reverseList(head->next);

  /**
   * 此时的结构
   *
   * 1 -> (2 <- 3 <- 4 <- 5)
   *
   * 所以还需要2个步骤:
   * - 1) 1 <- 2
   * - 2) NULL <- 1
   */

  // 3. 2 -> 1
  head->next->next = head; // 注意 head 此时 指向 1，所有 head->next 才指向 2

  // 4. 1 -> NULL
  head->next = null;

  // 5.
  return newHead;
}
